package allwe.testCGLib;

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * 我的方法拦截器 - 定义方法拦截规则
 */
public class MyMethodInterceptor implements MethodInterceptor {

    /**
     * Object o                    生成之后的代理对象
     * Method method               父类中原本要执行的方法
     * Object[] objects            方法在被调用时接收的实参
     * MethodProxy methodProxy     子类中重写的  父类方法
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("==========前置增强==========");

        // 执行子类对象方法   -->  son.super.method(args)
        Object res = methodProxy.invokeSuper(o, objects);

        System.out.println("==========后置增强==========");
        return res;
    }
}
